package ao.com.bna.controle;

import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import ao.com.bna.beans.ProcessoEstado;
import ao.com.bna.beans.TipoNotificacao;
import ao.com.bna.dao.ProcessoEstadoDao;
import ao.com.bna.dao.TipoNotificacaoDao;
import ao.com.bna.util.BeanFactory;

/**
 * @see ManagedBean para manipular dados da pagina xhtml
 */
@ManagedBean(name="tipoNotificacao")
@SessionScoped
public class TipoNotificacaoControle {

	private TipoNotificacao tipoNotificacaoEntity = new TipoNotificacao();

	private TipoNotificacaoDao tipoNotificacaoDao = (TipoNotificacaoDao) BeanFactory.getBean("tipoNotificacaoDao", TipoNotificacaoDao.class);
	private DataModel model;

	
	/**
	 * @see Metodo ListaTipoNotificacoes retorna todos os Tipo de Notificacao.
	 */
	public DataModel getListaTipoNotificacoes() {
        model = new ListDataModel(tipoNotificacaoDao.listar());
        return model;
    }

	
	/**
	 * @see Metodo salvarTipoNotificacao
	 */
	 public String salvarTipoNotificacao() {
	        String s = "listaTipoNotificacao";
	        try {
	        	
	        	tipoNotificacaoDao.gravar(tipoNotificacaoEntity);
	            
	        	//tipoNotificacaoEntity.setIdTipoNotificacao(null);
	        	tipoNotificacaoEntity.setDescricao("");

	            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"SALVOU COM SUCESSO","Tipo de Notificacao"));

	        } catch (Exception e) {
	            e.printStackTrace();
	            s = "falhou";
	            // mostrar o erro no faces
	            String msg = e.getCause().toString();
	            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,msg,"Processo Estado"));

	        }
	        return s;
	    }

	
	     /**
		 * @see Metodo navegaCriarTipoNotificacao vai para pagina criarTipoNotificacao.xhtml
		 */
	 public String navegaCriarTipoNotificacao() {
	        String t = "criaTipoNotificacao";
	        
	        //tipoNotificacaoEntity.setIdTipoNotificacao(null);
	        tipoNotificacaoEntity.setDescricao("");

	        // retorna o nome da pagina CriarTipoNotificacao
	        return t;

	    }

	 /**
      * @see Metodo editarTipoNotificacao 
	 */
	 public String editarTipoNotificacao() {
	        String r = "listaTipoNotificacao";
	        try {
	        	tipoNotificacaoDao.actualiza(tipoNotificacaoEntity);	            

	           FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"EDITOU COM SUCESSO","Tipo de Notificacao"));

	        } catch (Exception e) {
	            e.printStackTrace();
	            r = "falhou";
	            // mostrar o erro no faces
	            String msg = e.getCause().toString();
	            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,msg,"Tipo de Notificacao"));

	        }
	        return r;
	    }


	 /**
      * @see Metodo navegaEditarTipoNotificacao vai a pagina editarTipoNotificacao.xhtml 
	 */
     public String navegaEditarTipoNotificacao() {
    	 
    FacesContext context = FacesContext.getCurrentInstance();
    Map requestParameterMap = (Map) context.getExternalContext().getRequestParameterMap();
    // aqui tem que ser long porque o inteiro que ele recebe e do tipo long
    // o valor do get tem q ser igual ao valor d f:param na pagina listaTipoNotificacao.xhtml
    Long idTipoNotificacao = Long.parseLong(requestParameterMap.get("idTipoNotificacao").toString());
//    this.user = userDao.getUser(userId);
    this.tipoNotificacaoEntity = tipoNotificacaoDao.obterPorID(idTipoNotificacao);
   
    return "editarTipoNotificacao";
     }
     
     /**
      * @see Metodo apagarTipoNotificacao 
	 */
     public String apagarTipoNotificacao() {
	        String r = "listaTipoNotificacao";
	        try {
	        	tipoNotificacaoDao.remover(tipoNotificacaoEntity);
	            
	           FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"APAGOU COM SUCESSO","Tipo de Notificacao"));

	        } catch (Exception e) {
	            e.printStackTrace();
	            r = "falhou";
	            // mostrar o erro no faces
	            String msg = e.getCause().toString();
	            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,msg,"Tipo de Notificacao"));

	        }
	        return r;
	    }
    
     
     /**
      * @see Metodo navegaApagarTipoNotificacao 
	 */
    public String navegaApagarTipoNotificacao() {
   	 
        FacesContext context = FacesContext.getCurrentInstance();
        Map requestParameterMap = (Map) context.getExternalContext().getRequestParameterMap();
        // aqui tem que ser long porque o inteiro que ele recebe e do tipo long
        // o valor do get tem q ser igual ao valor d f:param na pagina listaProcessoEstado.xhtml
        Long idTipoNotificacao = Long.parseLong(requestParameterMap.get("idTipoNotificacao").toString());
        // this.user = userDao.getUser(userId);
        this.tipoNotificacaoEntity = tipoNotificacaoDao.obterPorID(idTipoNotificacao);
       
        return "apagarTipoNotificacao";
}

	public TipoNotificacao getTipoNotificacaoEntity() {
		return tipoNotificacaoEntity;
	}
	public void setTipoNotificacaoEntity(TipoNotificacao tipoNotificacaoEntity) {
		this.tipoNotificacaoEntity = tipoNotificacaoEntity;
	}
			
	public TipoNotificacaoDao getTipoNotificacaoDao() {
		return tipoNotificacaoDao;
	}
	
	public void setTipoNotificacaoDao(TipoNotificacaoDao tipoNotificacaoDao) {
		this.tipoNotificacaoDao = tipoNotificacaoDao;
	}		
	
}
